home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD School House 9
/
CD School House 9.0 - Wayzata Technology (1994).iso
/
pc
/
dos
/
teachaid
/
pccai
/
caiarc1.exe
/
CAIGRADE.BAS
< prev
next >
Wrap
BASIC Source File
|
1993-12-06
|
10KB
|
217 lines
10 DEFINT I-K, O
20 CLS : SCREEN 0: WIDTH 80: KEY OFF
30 DIM Y(1000), T(5), P8(10), P9(10)
40 DIM NAM$(1000), ORJ(1000)
50 COLOR 15, 0
60 '..............................................DISPLAY INTRO
70 LOCATE 5, 29: PRINT "PC-CAI Grading Program"
80 LOCATE 8, 10: PRINT "This program is provided to give you an example of how to"
90 LOCATE 9, 10: PRINT "extract information from the grade file created by PC-CAI."
100 LOCATE 10, 10: PRINT "You may have to change the program to meet your specific needs."
110 PRINT : PRINT
120 PRINT "(D)irectory (G)rade (E)nd Please Choose :"; : LOCATE , , 1
130 Q$ = INKEY$: IF Q$ = "" THEN 130
140 PRINT Q$; : IF Q$ = "D" OR Q$ = "d" THEN 180'......directory
150 IF Q$ = "G" OR Q$ = "g" THEN 210'..................grade
160 IF Q$ = "E" OR Q$ = "e" THEN CLS : SYSTEM'.........end program
170 GOTO 130
180 PRINT : PRINT "Input directory specification (i.e., A:*.OUT) :"; : INPUT SD$
190 FILES SD$: PRINT : GOTO 120
200 '..................................................................grade
210 PRINT : PRINT "GRADING SELECTION": PRINT
220 PRINT "Please indicate the name of the grade file you wish to use."
230 PRINT "ENTER NAME OF GRADE FILE :"; : INPUT GF$
240 ON ERROR GOTO 260
250 CLOSE 1: OPEN "i", 1, GF$: GOTO 270
260 SOUND 100, 10: PRINT : PRINT "ERROR *** GRADE FILE NAMED "; GF$; " NOT FOUND.": RESUME 120
270 ON ERROR GOTO 0
280 PRINT : PRINT "SELECT OUTPUT TO (S)creen or (P)rinter or (E)nd:"; : LOCATE , , 1
290 Q$ = INKEY$: IF Q$ = "" THEN 290
300 PRINT Q$; : IF Q$ = "S" OR Q$ = "s" THEN PRINTER = 0: GOTO 340
310 IF Q$ = "P" OR Q$ = "p" THEN PRINTER = 1: GOTO 340
320 IF Q$ = "E" OR Q$ = "e" THEN RUN
330 GOTO 290
340 PRINT : PRINT "Choose (D)etailed output or (S)ummary output or (E)nd:"; : LOCATE , , 1
350 SUMOUT = 0
360 Q$ = INKEY$: IF Q$ = "" THEN 360
370 PRINT Q$; : IF Q$ = "D" OR Q$ = "d" THEN 410
380 IF Q$ = "S" OR Q$ = "s" THEN SUMOUT = 1: GOTO 410
390 IF Q$ = "E" OR Q$ = "e" THEN RUN
400 GOTO 360
410 IF EOF(1) THEN 1130
420 LINE INPUT #1, A$
430 IF INSTR(A$, "@@@@@@@") > 0 THEN 440 ELSE GOTO 410'....begin new person
440 IF SUMOUT = 0 THEN
450 IF PRINTER = 1 THEN LPRINT STRING$(50, "-") ELSE PRINT STRING$(50, "-")
460 END IF
470 LINE INPUT #1, STUFF$ '...............pull off date and time info
480 FDATE$ = MID$(STUFF$, 6, 11)
490 FTIME$ = MID$(STUFF$, 22, 8)
500 NINFO = VAL(MID$(STUFF$, 36, 5))
510 NQUEST = VAL(MID$(STUFF$, 47, 7))
520 ISSUM = 0: IF INSTR(STUFF$, "SUMMARY") > 0 THEN ISSUM = 1
530 '.............................................print info stuff out
540 IF SUMOUT = 0 THEN
550 IF PRINTER = 0 THEN PRINT : PRINT FDATE$, FTIME$
560 IF PRINTER = 1 THEN LPRINT : LPRINT FDATE$, FTIME$
570 END IF
580 IF NINFO > 0 THEN
590 FOR I = 1 TO NINFO: LINE INPUT #1, INF$
600 IF I = 1 THEN GRADEINF$ = INF$' info to use in output summary
610 IF SUMOUT = 0 THEN
620 IF PRINTER = 1 THEN LPRINT INF$ ELSE PRINT INF$
630 END IF
640 NEXT I
650 END IF
660 IF PRINTER = 0 AND SUMOUT = 0 THEN PRINT ELSE LPRINT
670 IF ISSUM <> 1 THEN
680 FOR I = 1 TO NQUEST'...............results of individual questions
690 INPUT #1, ANS$
700 NUM = VAL(MID$(ANS$, 4))'.get question number
710 K = INSTR(ANS$, "Y:")' locate the TRY: marker
720 TRY = VAL(MID$(ANS$, K + 3))
730 IF SUMOUT = 0 THEN
740 IF PRINTER = 0 THEN
750 PRINT NUM; " Answered "; :
760 IF TRY = 0 THEN
770 PRINT " INCORRECTLY."
780 ELSE
790 PRINT " correctly on try number "; TRY
800 END IF
810 END IF
820 IF PRINTER = 1 THEN
830 LPRINT NUM; " Answered ";
840 IF TRY = 0 THEN
850 LPRINT " INCORRECTLY."
860 ELSE
870 LPRINT " correctly on try number "; TRY
880 END IF
890 END IF
900 END IF
910 NEXT I
920 END IF
930 LINE INPUT #1, SUMM$'.......................get the summary line
940 RIGHT = VAL(MID$(SUMM$, 15))
950 K = INSTR(SUMM$, "of")'.......find of marker in line
960 WRONG = NQUEST - RIGHT
970 IF SUMOUT = 0 THEN
980 IF PRINTER = 0 THEN PRINT : PRINT "Number of Questions = "; NQUEST
990 IF PRINTER = 1 THEN LPRINT : LPRINT "Number of Questions = "; NQUEST
1000 IF PRINTER = 0 THEN PRINT "Number answered wrong ="; WRONG
1010 IF PRINTER = 1 THEN LPRINT "Number answered wrong ="; WRONG
1020 IF PRINTER = 0 THEN PRINT "Number answered right ="; RIGHT
1030 IF PRINTER = 1 THEN LPRINT "Number answered right ="; RIGHT
1040 END IF
1050 ZGRADE = (RIGHT / NQUEST) * 100:
1060 IF SUMOUT = 0 THEN
1070 IF PRINTER = 1 THEN LPRINT : LPRINT "PERCENTAGE RIGHT = "; ZGRADE; " %"
1080 IF PRINTER = 0 THEN PRINT : PRINT "PERCENTAGE RIGHT = "; ZGRADE; " %"
1090 IF PRINTER = 0 THEN PRINT : PRINT "Please press ENTER "; : LINE INPUT Q$
1100 END IF
1110 GKT = GKT + 1: Y(GKT) = ZGRADE:
1120 NAM$(GKT) = LEFT$(GRADEINF$, 60): ORJ(GKT) = GKT: GOTO 410
1130 N = GKT: GOSUB 1160'summary statistics
1140 GOSUB 1980
1150 PRINT : PRINT "Press ENTER "; : LINE INPUT Q$: RUN
1160 ' ------------------------------------------statistics subroutines
1170 'IF printer = 0 THEN PRINT : PRINT "Number of observations : "; n
1180 'IF printer = 1 THEN LPRINT : LPRINT "Number of observations : "; n
1190 PRINT "Calculating Summary Statistics..."; : AX = CSRLIN: AY = POS(0)
1200 IF N < 2 THEN PRINT "Too few grades to calculate statistics.": RETURN
1210 REM CALL STATISTICS SUBROUTINE
1220 P9(1) = 0
1230 N8 = 7
1240 P9(2) = 25
1250 P9(3) = 50
1260 P9(4) = 75
1270 P9(5) = 100
1280 P9(6) = 2.5
1290 P9(7) = 97.5
1300 GOSUB 1630
1310 FOR I = 1 TO 5
1320 T(I) = P8(I)
1330 NEXT I
1340 REM so is s.d.
1350 S0 = V ^ .5
1360 REM S5 IS SEM
1370 S5 = (V / N) ^ .5
1380 LOCATE AX, 1: PRINT SPACE$(70); : PRINT
1390 IF PRINTER = 1 THEN 1460 ELSE PRINT
1400 PRINT "Summary Information": PRINT STRING$(70, "-"): PRINT
1410 PRINT USING "N = ######.###"; N
1420 PRINT USING "Mean = ######.### St. Dev = #######.###"; A; S0
1430 PRINT USING "Median = ######.### S.E.M. = #######.###"; T(3); S5
1440 PRINT USING "Minimum = ######.### Sum = #######.###"; T(1); S2
1450 PRINT USING "Maximum = ######.### Variance = #######.###"; T(5); V: GOTO 1530
1460 LPRINT
1470 LPRINT "Summary Information": LPRINT STRING$(70, "-"): LPRINT
1480 LPRINT USING "N = ######.###"; N
1490 LPRINT USING "Mean = ######.### St. Dev = #######.###"; A; S0
1500 LPRINT USING "Median = ######.### S.E.M. = #######.###"; T(3); S5
1510 LPRINT USING "Minimum = ######.### Sum = #######.###"; T(1); S2
1520 LPRINT USING "Maximum = ######.### Variance = #######.###"; T(5); V
1530 IF N < 5 THEN RETURN
1540 IF PRINTER = 0 THEN PRINT : PRINT "Five number summary ( 0,25,50,75,and 100 th percentile)"
1550 IF PRINTER = 1 THEN LPRINT : LPRINT "Five number summary ( 0,25,50,75,and 100 th percentile)"
1560 IF PRINTER = 0 THEN PRINT : PRINT USING " (###.##, ###.##, ###.##, ###.##, ###.##)"; T(1); T(2); T(3); T(4); T(5): PRINT
1570 IF PRINTER = 1 THEN LPRINT : LPRINT USING " (###.##, ###.##, ###.##, ###.##, ###.##)"; T(1); T(2); T(3); T(4); T(5): LPRINT
1580 RETURN
1590 REM STATISTICS SUBROUTINE------------------------------
1600 REM INPUT IS ARRAY Y(.) AND LENGTH N
1610 REM
1620 REM FIRST RANK THA DATA
1630 GOSUB 1860 'rank
1640 FOR I = 1 TO N8
1650 P = P9(I) / 100
1660 J = INT((N + 1) * P)
1670 G = ((N + 1) * P) - J
1680 IF J = 0 THEN P8(I) = Y(1)
1690 IF J = 0 THEN GOTO 1730
1700 IF J >= N THEN P8(I) = Y(N)
1710 IF J >= N THEN GOTO 1730
1720 P8(I) = (1 - G) * Y(J) + G * Y(J + 1)
1730 NEXT I
1740 REM ----------------S1=SUM OF SQUARES----S2=SUM----------
1750 S2 = 0
1760 S1 = 0
1770 FOR I = 1 TO N
1780 S2 = S2 + Y(I)
1790 S1 = S1 + (Y(I) * Y(I))
1800 NEXT I
1810 A = S2 / N
1820 S3 = S1 - S2 * S2 / N
1830 V = S3 / (N - 1)
1840 RETURN
1850 REM SUBROUTINE RANK---------------------------
1860 K = 1
1870 FOR I = 1 TO N
1880 IF K = 0 THEN 1950
1890 K = 0
1900 FOR J = 1 TO N - 1
1910 IF Y(J) <= Y(J + 1) THEN 1940
1920 SWAP Y(J), Y(J + 1)
1930 SWAP ORJ(J), ORJ(J + 1)
1940 K = 1
1950 NEXT J
1960 NEXT I
1970 RETURN
1980 IF N > 10 AND PRINTER = 0 THEN PRINT "Press Enter"; : LINE INPUT Q$
1990 IF PRINTER = 0 THEN PRINT : PRINT "Identification Grade Rank"
2000 IF PRINTER <> 0 THEN LPRINT : LPRINT "Identification Grade Rank"
2010 IF PRINTER = 0 THEN PRINT "--------------------------------------------- ------- ----"
2020 IF PRINTER <> 0 THEN LPRINT "--------------------------------------------- ------- ----"
2030 IF PRINTER = 0 THEN PRINT " " ELSE LPRINT " "
2040 FOR I = 1 TO N
2050 FOR J = 1 TO N
2060 IF ORJ(J) <> I GOTO 2120
2070 INF$ = NAM$(I): IF NAM$(I) = "" THEN INF$ = "TEST #" + STR$(I)
2080 IF PRINTER = 0 THEN PRINT INF$, TAB(65); ELSE LPRINT INF$, TAB(65);
2090 IF PRINTER = 0 THEN PRINT USING "###.## ###"; Y(J); N - J + 1
2100 IF PRINTER = 1 THEN LPRINT USING "###.## ###"; Y(J); N - J + 1
2110 GOTO 2130
2120 NEXT J
2130 NEXT I
2140 IF PRINTER = 1 THEN LPRINT CHR$(12); '..cause the printer to page
2150 RETURN